import time
import asyncio

now = lambda: time.time()


async def do_some_work(x):
    print('Waiting: ', x)


# 通过async关键字定义一个协程（coroutine），协程也是一种对象。协程不能直接运行，需要把协程加入到事件循环（loop），由后者在适当的时候调用协程。asyncio.get_event_loop方法可以创建一个事件循环，然后使用run_until_complete将协程注册到事件循环，并启动事件循环。
if __name__ == '__main__':
    start = now()

    coroutine = do_some_work(2)

    loop = asyncio.get_event_loop()
    # 当传入一个协程，其内部会自动封装成task，task是Future的子类。
    loop.run_until_complete(coroutine)
    # try:
    #     loop.run_forever()
    # except (KeyboardInterrupt, SystemExit):
    #     pass
    print('TIME: ', now() - start)

    print(isinstance(coroutine, asyncio.Future))
